// 函子是一个特殊的容器，通过一个普通的对象来实现，该对象具有map方法，map方法可以运行一个函数对值进行处理（变形函数）

// 一个容器，包裹一个值
class Container {
    // of 静态方法，可以省略 new 关键字创建对象+
    static of (value) {
        return new Container(value)
    }

    constructor (value) {
        this._value = value
    }

    // map方法，传入变形关系，将容器中的每一个值映射到另一个容器
    map (fn) {
        return Container.of(fn(this._value))
    }
}
// 测试
const ss = Container.of(3).map( x => x+2).map(x=>x*x)
console.log(ss)